/*
 * @Autor: lh
 * @Date: 2024-05-17 11:21:15
 * @LastEditors: lh
 * @LastEditTime: 2024-05-17 14:20:12
 * @Description: 
 */
import CryptoJS from 'crypto-js/crypto-js'
import md5 from 'js-md5'

/*
 * 默认的 KEY IV     如果在加密解密的时候没有传入KEY和IV,就会使用这里定义的
 * 
 * 前后端交互时需要前后端密钥和初始向量保持一致
 */

// const e_KEY = CryptoJS.enc.Utf8.parse("yD(EHrfj2hmLmCOf");//  加密密钥        长度必须为16位
// const d_KEY = CryptoJS.enc.Utf8.parse("hyTkMVj#itTAebN6");//  解密密钥        长度必须为16位
const e_KEY = "yD(EHrfj2hmLmCOf"; //  加密密钥
const d_KEY = "hyTkMVj#itTAebN6"; //  解密密钥  
const IV = CryptoJS.enc.Utf8.parse("crapX(Ue^RDbaUNw");           //  初始向量    长度随意

const randomNum = '123456789';//随机ID

/*
 * AES加密 ：字符串 key iv  返回base64
 */
export function Encrypt(str='', keyStr='', ivStr='') {
    let KEY = e_KEY;
    
    let key = KEY
    let iv = IV

    if (keyStr && ivStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }

    let srcs = CryptoJS.enc.Utf8.parse(str);
    var encrypt = CryptoJS.AES.encrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,            //这里可以选择AES加密的模式
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(encrypt.ciphertext);
}

/*
 * AES 解密 ：字符串 key iv  返回base64
 */
export function Decrypt(str='', keyStr='', ivStr='') {
    let KEY = d_KEY;
    let key = KEY
    let iv = IV

    if (keyStr && ivStr) {
        key = CryptoJS.enc.Utf8.parse(keyStr);
        iv = CryptoJS.enc.Utf8.parse(ivStr);
    }

    let base64 = CryptoJS.enc.Base64.parse(str);
    let src = CryptoJS.enc.Base64.stringify(base64);

    var decrypt = CryptoJS.AES.decrypt(src, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,            //这里可以选择AES解密的模式
        padding: CryptoJS.pad.Pkcs7
    });

    var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

function forLength(vals='',len=0,k=''){

}
/**
 * 加密 key
 * 
*/
export function encryption_key(userid='0000',token='xxxxxxxx'){
  // console.log('e_KEY---',e_KEY);
  let uids = '';
  if( userid.length < 4  ){
    let len = 4 - userid.length;
    // uids = userid
    for(let i=0;i<len;i++){
      uids += '0'
    }
    uids += userid
  }
  let tokenss = '';
  if( token.length < 8  ){
    let len = 4 - token.length;
    for(let i=0;i<len;i++){
      uids += 'x'
    }
    tokenss += token
  }
  let newkeys = md5(uids.substr(0,4)+tokenss.substr(tokenss.length-8,tokenss.length)).toLowerCase();
  // console.log(newkeys,newkeys.length,'---newkeys---');
  return newkeys.substr(0,16)
  // let keyval = '';
  // if( newkeys.length >=16 ){
  //   keyval = newkeys.substr(0,16)
  // }else{
  //   let y_num = 16 - newkeys.length;
  //   keyval = newkeys;
  //   for(let i=0;i<y_num;i++){
  //     keyval += 'x'
  //   }
  // }
  
  // return Encrypt( str,my,IV )
}
/**
 * 加密 val
 * 
*/
export function encryption_val(str=""){
  let newkeys = md5(randomNum+e_KEY).toLowerCase();
  let keyval = '';
  if( newkeys.length >=16 ){
    keyval = newkeys.substr(0,16)
  }else{
    let y_num = 16 - newkeys.length;
    keyval = newkeys;
    for(let i=0;i<y_num;i++){
      keyval += 'x'
    }
  }
  console.log('newkeys----s',keyval);
  
  let my = CryptoJS.enc.Utf8.parse(keyval)
  console.log( my,my.toString(),'---keyval---' );
  
  return Encrypt( str,my,IV )
}

/**
 * 解密 响应数据 key
 * 
*/
export function Decrypt_val(userid='',token='',str=""){

}